package io.github.talelin.latticy.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * VIP订单支付确认VO
 */
@Data
public class VipOrderPaymentConfirmVO {

    /**
     * 订单ID
     */
    private Long id;

    /**
     * 订单号
     */
    @JsonProperty("order_no")
    private String orderNo;

    /**
     * 买家信息
     */
    @JsonProperty("buyer_info")
    private BuyerInfo buyerInfo;

    /**
     * 卖家信息
     */
    @JsonProperty("seller_info")
    private SellerInfo sellerInfo;

    /**
     * 商品信息
     */
    @JsonProperty("product_info")
    private ProductInfo productInfo;

    /**
     * 支付信息
     */
    @JsonProperty("payment_info")
    private PaymentInfo paymentInfo;

    /**
     * 审核信息
     */
    @JsonProperty("audit_info")
    private AuditInfo auditInfo;

    /**
     * 时间信息
     */
    @JsonProperty("time_info")
    private TimeInfo timeInfo;

    /**
     * 拒绝记录信息（当订单被拒绝时）
     */
    @JsonProperty("rejection_info")
    private RejectionInfo rejectionInfo;

    /**
     * 支付凭证信息
     */
    @JsonProperty("payment_proof_info")
    private PaymentProofInfo paymentProofInfo;

    /**
     * 买家信息
     */
    @Data
    public static class BuyerInfo {
        @JsonProperty("user_id")
        private Long userId;
        @JsonProperty("user_nickname")
        private String userNickname;
        @JsonProperty("user_avatar")
        private String userAvatar;
        @JsonProperty("user_phone")
        private String userPhone;
        @JsonProperty("merchant_name")
        private String merchantName;
    }

    /**
     * 卖家信息
     */
    @Data
    public static class SellerInfo {
        @JsonProperty("saler_id")
        private Long salerId;
        @JsonProperty("saler_nickname")
        private String salerNickname;
        @JsonProperty("saler_avatar")
        private String salerAvatar;
        @JsonProperty("saler_phone")
        private String salerPhone;
        @JsonProperty("merchant_name")
        private String merchantName;
    }

    /**
     * 商品信息
     */
    @Data
    public static class ProductInfo {
        private String title;
        private String image;
        private BigDecimal price;
        private Long count;
        @JsonProperty("total_price")
        private BigDecimal totalPrice;
    }

    /**
     * 支付信息
     */
    @Data
    public static class PaymentInfo {
        private BigDecimal amount;
        @JsonProperty("pay_amount")
        private BigDecimal payAmount;
        @JsonProperty("pay_image")
        private String payImage;
        @JsonProperty("payment_status")
        private String paymentStatus;
        @JsonProperty("payment_status_text")
        private String paymentStatusText;
    }

    /**
     * 审核信息
     */
    @Data
    public static class AuditInfo {
        private String remark;
        @JsonProperty("auditor_name")
        private String auditorName;
        @JsonProperty("audit_time")
        private LocalDateTime auditTime;
    }

    /**
     * 时间信息
     */
    @Data
    public static class TimeInfo {
        @JsonProperty("create_time")
        private LocalDateTime createTime;
        @JsonProperty("update_time")
        private LocalDateTime updateTime;
        @JsonProperty("expired_time")
        private LocalDateTime expiredTime;
        private Boolean expired;
    }

    /**
     * 拒绝记录信息
     */
    @Data
    public static class RejectionInfo {
        /**
         * 拒绝原因
         */
        @JsonProperty("reject_reason")
        private String rejectReason;
        
        /**
         * 拒绝时间
         */
        @JsonProperty("reject_time")
        private LocalDateTime rejectTime;
        
        /**
         * 拒绝人ID
         */
        @JsonProperty("reject_by")
        private Long rejectBy;
        
        /**
         * 拒绝人姓名
         */
        @JsonProperty("reject_by_name")
        private String rejectByName;
        
        /**
         * 实际收到的金额
         */
        @JsonProperty("received_amount")
        private BigDecimal receivedAmount;
        
        /**
         * 期望的金额
         */
        @JsonProperty("expected_amount")
        private BigDecimal expectedAmount;
    }

    /**
     * 支付凭证信息
     */
    @Data
    public static class PaymentProofInfo {
        /**
         * 支付凭证ID
         */
        @JsonProperty("payment_proof_id")
        private Long paymentProofId;

        /**
         * 视频URL
         */
        @JsonProperty("video_url")
        private String videoUrl;

        /**
         * 验证状态
         */
        @JsonProperty("verification_status")
        private String verificationStatus;

        /**
         * 验证结果详情
         */
        @JsonProperty("verification_result")
        private VerificationResult verificationResult;

        /**
         * 是否强制提交
         */
        @JsonProperty("force_submit")
        private Boolean forceSubmit;

        /**
         * 强制提交原因
         */
        @JsonProperty("force_submit_reason")
        private String forceSubmitReason;

        /**
         * 用户备注
         */
        @JsonProperty("user_remark")
        private String userRemark;

        /**
         * 人工审核状态
         */
        @JsonProperty("manual_audit_status")
        private String manualAuditStatus;

        /**
         * 人工审核备注
         */
        @JsonProperty("manual_audit_remark")
        private String manualAuditRemark;

        /**
         * 审核人ID
         */
        @JsonProperty("auditor_id")
        private Long auditorId;

        /**
         * 审核人姓名
         */
        @JsonProperty("auditor_name")
        private String auditorName;

        /**
         * 审核时间
         */
        @JsonProperty("audit_time")
        private LocalDateTime auditTime;

        /**
         * 创建时间
         */
        @JsonProperty("create_time")
        private LocalDateTime createTime;
    }

    /**
     * 验证结果详情
     */
    @Data
    public static class VerificationResult {
        /**
         * 账单信息
         */
        @JsonProperty("bill_info")
        private BillInfo billInfo;

        /**
         * 验证信息
         */
        @JsonProperty("verification")
        private Verification verification;

        /**
         * 整体成功状态
         */
        @JsonProperty("overall_success")
        private Boolean overallSuccess;
    }

    /**
     * 账单信息
     */
    @Data
    public static class BillInfo {
        /**
         * 收款方名称
         */
        @JsonProperty("payee_name")
        private String payeeName;

        /**
         * 订单号
         */
        @JsonProperty("order_number")
        private String orderNumber;

        /**
         * 支付金额
         */
        @JsonProperty("payment_amount")
        private BigDecimal paymentAmount;

        /**
         * 支付时间
         */
        @JsonProperty("payment_time")
        private String paymentTime;

        /**
         * 支付方式
         */
        @JsonProperty("payment_method")
        private String paymentMethod;

        /**
         * 是否为账单查询
         */
        @JsonProperty("is_bill_query")
        private Boolean isBillQuery;

        /**
         * 是否来自桌面
         */
        @JsonProperty("is_from_desktop")
        private Boolean isFromDesktop;

        /**
         * 置信度
         */
        private Double confidence;
    }

    /**
     * 验证信息
     */
    @Data
    public static class Verification {
        /**
         * 验证状态
         */
        @JsonProperty("verification_status")
        private String verificationStatus;

        /**
         * 收款方匹配
         */
        @JsonProperty("payee_match")
        private Boolean payeeMatch;

        /**
         * 订单号重复
         */
        @JsonProperty("order_duplicate")
        private Boolean orderDuplicate;

        /**
         * 商户名称
         */
        @JsonProperty("merchant_name")
        private String merchantName;

        /**
         * 支付凭证ID
         */
        @JsonProperty("payment_proof_id")
        private Long paymentProofId;
    }
} 